#ifndef __AngleAlgorithm_H__
#define __AngleAlgorithm_H__

struct POS_VALVE
{
	float pos;
	float valve;
	POS_VALVE() {
		pos = 0;
		valve = 0;
	}
};

/*
 * 计算mix比例辅助类
 */
class AngleAlgorithm
{
public:

	AngleAlgorithm();
	~AngleAlgorithm();
    /**
     *  测试用的接口，改变mix的方式，在直线mix和曲线mix间切换
     *
     *  @return 0表示失败，其它表示成功
     */
	static int changeMix();
    
    /**
     *  设置音频流的个数
     *
     *  @param size 音频流的个数
     */
	void setSize(int size);
    
    /**
     *  设置当前的角度，0～360
     *
     *  @param angle
     */
	void setAngle(float angle);
    
    /**
     *  计算出mix的参数
     *
     *  @param idA         输出参数，返回当前需要的音频流A
     *  @param idB         输出参数，返回当前需要的音频流B
     *  @param proportionA 输出参数，返回当前需要的音频流A的混合比例，0～1
     *  @param proportionB 输出参数，返回当前需要的音频流B的混合比例，0～1
     *
     *  @return 是否计算成功
     */
	bool getProportion(int* idA, int* idB, float* proportionA, float* proportionB);
private:
	inline bool isSameLine(float beginPos,float endPos,float lastPos,float newPos);
	inline float calcPosValve(POS_VALVE lastBegin, POS_VALVE lastEnd, float pos);
	inline bool isSameInterval(float lastPos, float newPos);
	inline void getInterval(POS_VALVE lastBegin, POS_VALVE lastEnd, POS_VALVE lastPos,float pos,
		POS_VALVE* outBegin, POS_VALVE* outEnd);
private:

	int _size;
	int _angle;
    
	POS_VALVE _lastBegin;
	POS_VALVE _lastEnd;
	POS_VALVE _lastPos;

};


#endif //__AngleAlgorithm_H__
